home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / source / src / arith / irandom.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  1.2 KB  |  65 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  irandom.c
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. /*     irandom.c    RD, 26.03.90 */
  16.  
  17. #include <LEDA/impl/iint.h>
  18. #include <LEDA/impl/iloc.h>
  19.  
  20. #include <time.h>
  21. #include <sys/types.h>
  22.  
  23. static PLACE Prandom()
  24.     /* return  random 16/31 bits; */
  25. {    unsigned int x;
  26.         time_t seed;
  27.     static BOOLEAN init=FALSE;
  28.  
  29.     if (!init) {
  30.         init=TRUE;
  31.         time(&seed);
  32.         srandom((int)seed);
  33.     }
  34.     return random();
  35. }        /* Prandom */
  36.  
  37. void IasrandomI(a, b)
  38.     Integer *a;
  39.     const Integer *b;
  40. /* waehle a zufaellig mit 0<=|a|<|b|, a->sign=b->sign.
  41.    a und b muessen verschieden sein. */
  42. {    register int i;
  43.     register pPLACE pa;
  44.     register int nl;
  45.     nl=b->length;
  46.     if (nl>a->maxlength) {
  47.         delvec(a->vec, a->maxlength);
  48.         a->maxlength=nl;
  49.         a->vec=newvec(&a->maxlength);
  50.     }
  51.     pa=a->vec;
  52.     pa[nl-1]=Prandom()%(b->vec[nl-1]);
  53.     for (i=nl-2; i>=0; i--)
  54.         pa[i]=Prandom();
  55.     i=nl;
  56.     while (!pa[i-1] && i>0)
  57.         i--;
  58.     a->length=i;
  59.     if (i)
  60.         a->sign=b->sign;
  61.     else
  62.         a->sign=PLUS;
  63. }            /* IasrandomI */
  64.